/*
 * MyColumnCellEditor.java
 * Copyright 2010 Universidad Francisco de Paula Santander (UFPS).
 * Todos los Derechos Reservados.
 * Creado el 18/04/2010, 11:31:30 PM
 */


package com.ufps.cuatro.util.editor;

import java.awt.Component;

import javax.swing.AbstractCellEditor;
import javax.swing.JTable;
import javax.swing.table.TableCellEditor;

import com.ufps.cuatro.util.Utileria;

/**
 * <i><b>MyColumnCellEditor:</b></i> @DescripcionClase
 * @author Carlos A. Torres C. - Dolly E. Guerrero. <https://code.google.com/p/tesis4dor/>
 * @version 1.0 18/04/2010
 * @see AbstractCellEditor
 * @see TableCellEditor
 */
public class MyColumnCellEditor extends AbstractCellEditor implements TableCellEditor{
    private static final long serialVersionUID = -3362230132643168613L;    
    
    private JTable jTableRepresentacion;
    private Object objVentana, obj;
    /**
     * @DescripcionAtributo
     */
    public final static int MODO_REPRESENTACION = 0;
    /**
     * @DescripcionAtributo
     */
    public final static int MODO_DISTRIBUCION = 1;
    private int modo;

    /**
     * @DescripcionAtributo
     */
    protected static final String label = Utileria.leerRecursoTexto("Utileria.msg.no.disponible");
    /**
     * @DescripcionAtributo
     */
    protected static final String labelButtonPropiedad = Utileria.leerRecursoTexto("Utileria.label.button.table.propiedad");
    /**
     * @DescripcionAtributo
     */
    protected static final String labelButtonEvento = Utileria.leerRecursoTexto("Utileria.label.button.table.evento");    

    /**
     * @DescripcionMetodo
     */
    public MyColumnCellEditor() {
    }

    /**
     * @DescripcionMetodo
     * @param jTable1 @DescripcionParametro
     * @param modo
     */
    public MyColumnCellEditor(JTable jTable1, int modo) {
        this.jTableRepresentacion = jTable1;
        this.modo = modo;
    }

    /**
     * @DescripcionMetodo
     * @param jTable1 @DescripcionParametro
     * @param objVentana @DescripcionParametro
     * @param modo @DescripcionParametro
     */
    public MyColumnCellEditor(JTable jTable1, Object objVentana, int modo) {
        this.jTableRepresentacion = jTable1;
        this.objVentana = objVentana;
        this.modo = modo;
    }

    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
       try{
        switch(modo){
            case MODO_REPRESENTACION:
//                if(value instanceof ObjetoGenerador){
//                    ObjetoGenerador objGenerador = (ObjetoGenerador) value;
//                    this.obj = objGenerador;
//                    if (column == 1) {
//                        if(objGenerador.getObjCaso() instanceof CasoField ||
//                                objGenerador.getObjCaso() instanceof CasoMethod ||
//                                objGenerador.getObjCaso() instanceof CasoParam ||
//                                objGenerador.getObjCaso() instanceof CasoSimple ||
//                                objGenerador.getObjCaso() instanceof CasoReturn){
//                            MyButtonEditor objButton = new MyButtonEditor(labelButtonPropiedad, objGenerador, objVentana, table);
//                            return objButton;
//                        }
//                    }
//                    else if(column == 3){
//                        return new MyButtonEditor(MyColumnCellEditor.labelButtonEvento, objGenerador, objVentana, table);
//                    }
//                }
                break;
            case MODO_DISTRIBUCION:
//                try{
//                    if(column == 1){
//                        Boolean objBoolean = value != null ? (Boolean) value : new Boolean(false);
//                        boolean valor = objBoolean.booleanValue();
//                        return new JCheckBox(valor ? "Incluido" : "No Incluido", valor);
//                    }
//                }catch(java.lang.Exception ex){
//                    return new JCheckBox("Error Desconocido", false);
//                }
                break;
        }
                
        return this.getTableCellEditorComponent(table, value, isSelected, row, column);
    }catch(java.lang.StackOverflowError ex){}
       return null;
    }

    public Object getCellEditorValue() {
        return this.obj;
    }
}

/*public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
        switch(modo){
            case MODO_REPRESENTACION:
                //se obtiene el objeto
                ObjetoGenerador objGenerador = (ObjetoGenerador) table.getValueAt(row, 1);
                if(objGenerador != null){
                    this.obj = objGenerador;
                    if (column == 1) {
                        if(objGenerador.getObjCaso() instanceof CasoMethod){
                            CasoMethod objCaso = (CasoMethod) objGenerador.getObjCaso();
                            if(objCaso.getEnumPropiedad() == TipoPropiedad.eReturn){

                            }
                            if(objCaso.isSet()){
                                CasoParam objCasoParam = (CasoParam) objCaso.getObjGeneradorParam().getObjCaso();
                                if(objCasoParam.geteControl() == TipoControl.eButton){
                                    MyButtonEditor objButton = new MyButtonEditor(labelButtonPropiedad, objGenerador, objVentana, table);
                                    return objButton;
                                }
                                else if(objCasoParam.geteControl() == TipoControl.eCombo){
                                    if(objCasoParam.geteCaso() == TipoCaso.ePrimitivo ||
                                            objCasoParam.geteCaso() == TipoCaso.eEnumeracion ||
                                            objCasoParam.geteCaso() == TipoCaso.eJDKRegistrado){
                                        MyComboBoxEditor objCombo = new MyComboBoxEditor(objGenerador, objCasoParam.getObjControles().toArray());
                                        return objCombo;
                                    }
                                    else{
                                        JLabel objLabel = new JLabel("Error");
                                        return objLabel;
                                    }
                                }
                                else if(objCasoParam.geteControl() == TipoControl.eLabel){
                                    JLabel objLabel = new JLabel(label);
                                    return objLabel;
                                }
                            }
                            else{
                                if(objCaso.geteControl() == TipoControl.eButton){
                                    MyButtonEditor objButton = new MyButtonEditor(labelButtonPropiedad, objGenerador, objVentana, table);
                                    return objButton;
                                }
                                else if(objCaso.geteControl() == TipoControl.eCombo){
                                    if(objCaso.geteCaso() == TipoCaso.ePrimitivo ||
                                            objCaso.geteCaso() == TipoCaso.eEnumeracion ||
                                            objCaso.geteCaso() == TipoCaso.eJDKRegistrado){
                                        MyComboBoxEditor objCombo = new MyComboBoxEditor(objGenerador, objCaso.getObjControles().toArray());
                                        return objCombo;
                                    }
                                    else{
                                        JLabel objLabel = new JLabel("Error");
                                        return objLabel;
                                    }
                                }
                                else if(objCaso.geteControl() == TipoControl.eLabel){
                                    JLabel objLabel = new JLabel(label);
                                    return objLabel;
                                }
                            }
                        }
                        else if(objGenerador.getObjCaso() instanceof CasoParam){
                            CasoParam objCaso = (CasoParam) objGenerador.getObjCaso();
                            if(objCaso.geteControl() == TipoControl.eButton){
                                MyButtonEditor objButton = new MyButtonEditor(labelButtonPropiedad, objGenerador, objVentana, table);
                                return objButton;
                            }
                            else if(objCaso.geteControl() == TipoControl.eCombo){
                                if(objCaso.geteCaso() == TipoCaso.ePrimitivo ||
                                        objCaso.geteCaso() == TipoCaso.eEnumeracion ||
                                        objCaso.geteCaso() == TipoCaso.eJDKRegistrado){
                                    MyComboBoxEditor objCombo = new MyComboBoxEditor(objGenerador, objCaso.getObjControles().toArray());
                                    return objCombo;
                                }
                                else{
                                    JLabel objLabel = new JLabel("Error");
                                    return objLabel;
                                }
                            }
                            else if(objCaso.geteControl() == TipoControl.eLabel){
                                JLabel objLabel = new JLabel(label);
                                return objLabel;
                            }
                        }
                        else if(objGenerador.getObjCaso() instanceof CasoSimple){
                            CasoSimple objCaso = (CasoSimple) objGenerador.getObjCaso();
                            if(objCaso.geteControl() == TipoControl.eButton){
                                MyButtonEditor objButton = new MyButtonEditor(labelButtonPropiedad, objGenerador, objVentana, table);
                                return objButton;
                            }
                            else if(objCaso.geteControl() == TipoControl.eCombo){
                                if(objCaso.geteCaso() == TipoCaso.ePrimitivo ||
                                        objCaso.geteCaso() == TipoCaso.eEnumeracion ||
                                        objCaso.geteCaso() == TipoCaso.eJDKRegistrado){
                                    MyComboBoxEditor objCombo = new MyComboBoxEditor(objGenerador, objCaso.getObjControles().toArray());
                                    return objCombo;
                                }
                                else{
                                    JLabel objLabel = new JLabel("Error");
                                    return objLabel;
                                }
                            }
                            else if(objCaso.geteControl() == TipoControl.eLabel){
                                JLabel objLabel = new JLabel(label);
                                return objLabel;
                            }
                        }
                        else{
                            JLabel objLabel = new JLabel(label);
                            return objLabel;
                        }
                    }
                    else if(column == 3){
                        return new MyButtonEditor(MyColumnCellEditor.labelButtonEvento, objGenerador, objVentana, table);
                    }
                }
                break;
            case MODO_DISTRIBUCION:
                try{
                    if(column == 1){
                        Boolean objBoolean = value != null ? (Boolean) value : new Boolean(false);
                        boolean valor = objBoolean.booleanValue();
                        return new JCheckBox(valor ? "Incluido" : "No Incluido", valor);
                    }
                }catch(java.lang.Exception ex){
                    return new JCheckBox("Error Desconocido", false);
                }
                break;
        }

        return this.getTableCellEditorComponent(table, value, isSelected, row, column);
    }

    public Object getCellEditorValue() {
        return this.obj;
    }
 */

/*if(objGenerador.getObjCaso() instanceof CasoField){
                            CasoField objCaso = (CasoField) objGenerador.getObjCaso();
                            if(objCaso.geteControl() == TipoControl.eButton){
                                MyButtonEditor objButton = new MyButtonEditor(labelButtonPropiedad, objGenerador, objVentana, table);
                                return objButton;
                            }
                            else if(objCaso.geteControl() == TipoControl.eCombo){
                                if(objCaso.geteCaso() == TipoCaso.ePrimitivo ||
                                        objCaso.geteCaso() == TipoCaso.eEnumeracion ||
                                        objCaso.geteCaso() == TipoCaso.eJDKRegistrado){
                                    MyComboBoxEditor objCombo = new MyComboBoxEditor(objGenerador, objCaso.getObjControles().toArray());
                                    return objCombo;
                                }
                                else{
                                    JLabel objLabel = new JLabel("Error");
                                    return objLabel;
                                }
                            }
                            else if(objCaso.geteControl() == TipoControl.eLabel){
                                JLabel objLabel = new JLabel(label);
                                return objLabel;
                            }
                        }
                        else */